A storage system typically comprises one or more storage devices into which information may be entered, and from which information may be obtained, as desired. The storage system includes a storage operating system that functionally organizes the system by, inter alia, invoking storage operations in support of a storage service implemented by the system. The storage system may be implemented in accordance with a variety of storage system architecture environments including, but not limited to, a network-attached storage (NAS) environment, a storage area network (SAN) and a disk assembly is directly attached to a client or host computer. The storage devices are typically disk drives organized as a disk array, wherein the term “disk” commonly describes a self-contained rotating magnetic media storage device. The term disk in this context is synonymous with hard disk drive (HDD) or direct access storage device (DASD).
Storage of information on the disk array is preferably implemented as one or more storage “volumes” of physical disks, defining an overall logical arrangement of disk space. The disks within a volume are typically organized as one or more groups, wherein each group may be operated as a Redundant Array of Independent (or Inexpensive) Disks (RAID). Most RAID implementations enhance the reliability/integrity of data storage through the redundant writing of data “stripes” across a given number of physical disks in the RAID group, and the appropriate storing of redundant information (parity) with respect to the striped data. The physical disks of each RAID group may include disks configured to store striped data (i.e., data disks) and disks configured to store parity for the data (i.e., parity disks). The parity may thereafter be retrieved to enable recovery of data lost when a disk fails. The term “RAID” and its various implementations are well-known and disclosed in A Case for Redundant Arrays of Inexpensive Disks (RAID), by D. A. Patterson, G. A. Gibson and R. H. Katz, Proceedings of the International Conference on Management of Data (SIGMOD), June 1988.
The storage operating system of the storage system may implement a high-level module, such as a file system, to logically organize the information stored on the disks as a hierarchical structure of directories, files and blocks. For example, each “on-disk” file may be implemented as set of data structures, i.e., disk blocks, configured to store information, such as the actual data for the file. These data blocks are organized within a volume block number (vbn) space that is maintained by the file system. The file system organizes the data blocks within the vbn space as a “logical volume”; each logical volume may be, although is not necessarily, associated with its own file system. The file system typically consists of a contiguous range of vbns from zero to n, for a file system of size n+1 blocks.
A known type of file system is a write-anywhere file system that does not overwrite data on disks. If a data block is retrieved (read) from disk into a memory of the storage system and “dirtied” (i.e., updated or modified) with new data, the data block is thereafter stored (written) to a new location on disk to optimize write performance. A write-anywhere file system may initially assume an optimal layout such that the data is substantially contiguously arranged on disks. The optimal disk layout results in efficient access operations, particularly for sequential read operations, directed to the disks. An example of a write-anywhere file system that is configured to operate on a storage system is the Write Anywhere File Layout (WAFL®) file system available from Network Appliance, Inc., of Sunnyvale, Calif.
The storage system may be configured to operate according to a client/server model of information delivery to thereby allow many clients to access the directories, files and blocks stored on the system. In this model, the client may comprise an application, such as a database application, executing on a computer that “connects” to the storage system over a computer network, such as a point-to-point link, shared local area network, wide area network or virtual private network implemented over a public network, such as the Internet. Each client may request the services of the file system by issuing file system protocol messages (in the form of packets) to the storage system over the network. By supporting a plurality of file system protocols, such as the conventional Common Internet File System (CIFS) and the Network File System (NFS) protocols, the utility of the storage system is enhanced.
In addition to implementing the file system, the storage operating system may implement the functionality of a volume manager and/or other data redundancy features typically in connection with one or more versions (releases) of the system. As storage system providers introduce new versions of storage operating systems, administrators may need to upgrade various storage systems under their control. This process includes both upgrading the storage operating system software as well as the configuration information so that the storage system configuration is compatible with each new version of the storage operating system. Additionally, administrators may desire to revert to a previous version of a storage operating system for a variety of reasons including, for example, backward compatibility; i.e., to ensure that cooperating storage systems execute the same version of software, particularly when one of the storage systems may not support the newer version of the storage operating system.
When a storage operating system, or any software, has a single product release line, supporting the upgrade/reversion of the configuration is relatively straightforward and linear. For example, to upgrade from version X to version X+3, the administrator first upgrades to version X+1 and then from version X+1 to version X+2 and finally from version X+2 to version X+3. However, a noted disadvantage of storage operating system or other software upgrades/reversions occurs when the software is available in multiple product release lines. An example of multiple release lines is a software product having a base version X.Y and two (or more) lines such as X+1.Y and X.Y+1. Thus, a base version may be version 5.0, whereas the two differing release lines may be 6.0 and 5.1. Clearly, the conventional linear upgrade/revert process is not operative when supporting upgrade/reversion among such multiple product release lines.